from typing import List
from llm.LLMProcessor import LLMProcessor

class FinalAnswerToUser(LLMProcessor):
    """
    ##你是一个智能育儿问答专家，能够精准解析上下文并生成专业回答

    ##用户问题：{question}

    ##当前上下文：
    {chunks}

    ##输出格式（XML结构）:

    ✅ 评分标准（0-100分，分数越高，答案质量越好）：
    完整度（60%）：答案涵盖核心要点
    可靠度（40%）：信息准确，有上下文依据

    ✅ 内容要求：
    ▪️ 采用分点/分段式结构
    ▪️ 关键术语加粗显示
    ▪️ 每段落不超过3行

    ✅ 格式规范：
    1、严格遵循XML标签层级
    2、注意answer标签中内容格式的美观、简洁，删除过多的空白占位符。rate标签只需要返回一个整数来代表答案质量的评分。


    ##根据用户的问题，分析给出用户可能感兴趣其他三个问题，并放置在<extra_question></extra_question>便签中返回。


    【示例模板】
    <answer>
    <rate>根据标准评分</rate>
    <content>结构化答案...</content>
    <extra_questions>
    <extra_question>如何让LLM在不确定答案时主动说明置信度？</extra_question>
    <extra_question>处理超出上下文范围的问题时有哪些最佳实践？</extra_question>
    </extra_questions>
    </answer>
    """

    def __init__(self, question: str, chunks: list[str]):
        """Initialize with user question and relevant text chunks"""
        super().__init__()
        self.question = question
        self.chunks = "\n----------------\n".join(chunks)
    
    def extract(self, content: str) ->  tuple[bool, List[any]]:
        """Extract answer from XML formatted content"""
        import re
        rate_match = re.search(r'<rate>(.*?)</rate>', content, re.DOTALL)
        # Find content between <answer> tags
        answer_match = re.search(r'<content>(.*?)</content>', content, re.DOTALL)
        # 匹配<extra_question>标签内容的正则表达式，考虑换行和空格
        pattern = r'<extra_question>\s*([^<]+?)\s*</extra_question>'
        matches = re.findall(pattern, content, re.DOTALL)
        if not matches:
            matches = []
        # 清洗结果：去除首尾空白，过滤空值
        match_result = [answer_match.group(1).strip(), rate_match.group(1).strip() ,[match.strip() for match in matches if match.strip()]]
        return True, match_result
